package com.drug.mingkang.permission.service.impl;

import com.drug.mingkang.permission.mapper.PerRoleModuleMapper;
import com.drug.mingkang.permission.model.PerRole;
import com.drug.mingkang.permission.mapper.PerRoleMapper;
import com.drug.mingkang.permission.model.PerRoleModule;
import com.drug.mingkang.permission.model.PerUsers;
import com.drug.mingkang.permission.model.vo.PerRoleVo;
import com.drug.mingkang.permission.service.PerRoleService;
import com.drug.mingkang.utils.ResponseMessage;
import com.drug.mingkang.utils.Tools;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 角色表(PerRole)表服务实现类
 *
 * @author wenchangjian
 * @since 2020-08-11 12:00:14
 */
@Service("perRoleService")
public class PerRoleServiceImpl implements PerRoleService {
    @Resource
    private PerRoleMapper perRoleMapper;


    @Resource
    private PerRoleModuleMapper perRoleModuleMapper;

    @Resource
    private Tools tools;


    @Resource
    private ResponseMessage responseMessage;
    /**
     * 通过ID查询单条数据
     *
     * @param roleId 主键
     * @return 实例对象
     */
    @Override
    public PerRole queryById(Integer roleId) {
        return this.perRoleMapper.queryById(roleId);
    }

    /**
     * 查询多条数据
     *
     *
     * @param perRoleVo@return 对象列表
     */
    @Override
    public Map<String, Object> queryAllByLimit(PerRoleVo perRoleVo) {
        return tools.limit(this.perRoleMapper.queryAllByLimit(perRoleVo),this.perRoleMapper.count(perRoleVo)) ;
    }

    /**
     * 新增数据
     *
     * @param perRole 实例对象
     * @return 实例对象
     */
    @Override
    public PerRole insert(PerRole perRole) {
        this.perRoleMapper.insert(perRole);
        return perRole;
    }

    /**
     * 修改数据
     *
     * @param perRole 实例对象
     * @return 实例对象
     */
    @Override
    public PerRole update(PerRole perRole) {
        this.perRoleMapper.update(perRole);
        return this.queryById(perRole.getRoleId());
    }

    /**
     * 通过主键删除数据
     *
     * @param roleId 主键
     * @return 是否成功
     */
    @Override
    public ResponseMessage deleteById(Integer roleId) {
        return this.perRoleMapper.deleteById(roleId) > 0 ? ResponseMessage.success("删除成功") : ResponseMessage.error("删除失败");
    }

    /**
     * 角色新增 编辑
     * @param perRole 实例对象
     * @param session
     * @return
     */
    @Override
    public ResponseMessage insertAndEdit(PerRole perRole, HttpSession session) {
        //当前登录人信息
        PerUsers perUsers = (PerUsers) session.getAttribute("perUsers");
        //增加
        if (StringUtils.isEmpty(perRole.getRoleId())) {
            //设置创建人
            perRole.setCreatePerson(perUsers.getUserName());
            //添加角色信息
            responseMessage = perRoleMapper.insertSelective(perRole) > 0 ? ResponseMessage.success("增加成功") : ResponseMessage.error("增加失败");
            //批量增加 角色模块表
            if (perRole.getModuleAll() != null && !"".equals(perRole.getModuleAll())) {
                //创建新集合
                List<PerRoleModule> list = new ArrayList<>(1);
                for (String moduleId : perRole.getModuleAll()) {
                    PerRoleModule perRoleModule = new PerRoleModule();
                    perRoleModule.setRoleId(perRole.getRoleId());
                    perRoleModule.setModuleId(moduleId);
                    list.add(perRoleModule);
                }
                //批量增加角色模块表
                perRoleModuleMapper.insertBatch(list);
            }
            //返回api统一信息
            return responseMessage;
        } else {
            //根据所编辑的角色ID 删除角色模块表所有是这个角色的
            perRoleModuleMapper.deleteRoleById(perRole.getRoleId());
            //批量增加 角色模块表
            if (perRole.getModuleAll() != null && !"".equals(perRole.getModuleAll())) {
                List<PerRoleModule> list = new ArrayList<>(1);
                for (String moduleId : perRole.getModuleAll()) {
                    PerRoleModule perRoleModule = new PerRoleModule();
                    perRoleModule.setRoleId(perRole.getRoleId());
                    perRoleModule.setModuleId(moduleId);
                    list.add(perRoleModule);
                }
                //批量增加角色模块表
                perRoleModuleMapper.insertBatch(list);
            }
            //设置创建人
            perRole.setCreatePerson(perUsers.getUserName());
            return responseMessage = perRoleMapper.update(perRole) > 0 ? ResponseMessage.success("编辑成功") : ResponseMessage.error("编辑失败");
        }
    }

    /**
     * 通过主键修改数据 修改 WHETHER_VALID 状态
     * @param idAll
     * @return
     */
    @Override
    public ResponseMessage deleteAllById(String[] idAll) {
        return perRoleMapper.deleteAllById(idAll) >= idAll.length - 1 ? ResponseMessage.success("删除成功") : ResponseMessage.error("删除失败");
    }

    @Override
    public List<PerRole> queryAll() {
        return perRoleMapper.queryAllRole();
    }
}